<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	{
		// 1- async函数如何定义(声明)
		async function fn(){
		
		}
		const fn2 = async function(){
		
		}
		const fn3 = async ()=>{};
		setTimeout(async function(){
		
		});
		setTimeout(async ()=>{
		
		});
		const obj = {
			one:async function(){
			
			},
			two:async ()=>{
			
			},
			async three(){
			
			}
		};
		class Box{
			static async fn(){
			
			}
			async my(){
			
			}
		}
	}
	{
		// 2- async 函数的返回值为promise对象
		
		// 1- async函数的返回值是一个新的Promise实例
		// 2- 返回的Promise实例受函数的返回值的影响。
		// 3- 如果函数返回的是一个非Promise实例，那么最终得到的Promise实例状态为成功，值为返回值
		// 4- 如果函数返回的是一个Promise实例，那么最终得到的Promise实例状态以及值与返回的相同。
		// 5- 如果函数体内产生异常，最终获取到的Promise实例状态为失败，值为异常信息
		
		async function fn(){
			throw "异常";
			return Promise.reject(10);
		}
		
		console.log(fn());// rejected 异常
		
		// async function fn(){
		// 	return Promise.reject(10);
		// }
		// fn().then(value=>{
		// 	console.log("成功",value);
		// }).catch(reason=>{
		// 	console.log("失败",reason);
		// })
		// console.log(fn());// rejected 10
		
		// async function fn(){
		// 	return Promise.resolve(1);
		// }
		// console.log(fn());// fulfilled 1
		
		// async function fn(){
		// 	return 1;
		// }
		// console.log(fn());// fulfilled 1
		
		// async function fn(){
		//
		// }
		// console.log(fn());// fulfilled undefined
	}
	// * promise对象的结果由`async`函数执行的返回值决定
</script>
</html>